/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Negocio;

import ManejoExc.PersonalException;
import java.sql.Date;
import java.util.ArrayList;

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
 *
 * @author Diego
 */
public class TipoRol {
    private Integer idTipoRol;
    private String nombre;
    private Set<Rol> roles;
    private boolean activo;
    
    //Constructores
    public TipoRol(){
        
    }
    public TipoRol(String unNombre){
        this.nombre=unNombre;
        this.roles=new HashSet();
        this.activo = true;
        Empresa.persistencia.insert(this);
        
    }
    
    //Set & Get
    
    public Integer getIdTipoRol(){
        return idTipoRol;
    }

    public void setIdTipoRol(Integer idTipoRol) {
        this.idTipoRol = idTipoRol;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public Set<Rol> getEmpleados() {
        return roles;
    }

    public void setEmpleados(Set<Rol> roles) {
        this.roles = roles;
    }

    public boolean getActivo() {
        return activo;
    }

    public void setActivo(boolean activo) {
        this.activo = activo;
    }

    public Set<Rol> getRoles() {
        return roles;
    }

    public void setRoles(Set<Rol> roles) {
        this.roles = roles;
    }
    
    
 
    //Metodos
    
    public void actualizar(String unNombre){
        this.setNombre(unNombre);
        Empresa.persistencia.update(this);
    }
   
    
    public boolean isTipoRol(String unNombreRol){
        boolean flag = false;
        if(this.getNombre().equals(unNombreRol)){
            flag = true;
        }
        return flag;
    }
    
    public void cambiarEstado(boolean unEstado){
        this.activo = unEstado;
        Empresa.persistencia.update(this);
    }
    
    public void agregarPersonal(Rol unRol){
        this.roles.add(unRol);
        Empresa.persistencia.update(this);
    }
    
    public void quitarPersonal(Rol unRol){
        this.roles.remove(unRol);
        Empresa.persistencia.update(this);
    }
    
    public boolean existeEmpleado(Personal unPersonal) {
        boolean salida = false;
        
        Iterator it = this.getEmpleados().iterator();
        while (it.hasNext() & !salida){
            Personal unEmpleado = (Personal) it.next();
            if(unPersonal.equals(unEmpleado)){
                salida = true;
            }
        }
        return salida;
    }
    
    @Override
    public String toString (){
        return this.nombre;
    }
    
    public void quitarRol(Rol unRol){
        this.roles.remove(unRol);
        Empresa.persistencia.update(this);
    }
    
     public String horasTrabajadas(int mes, int anio){
            Long horasTrabajadas = new Long("0");
            RegistroHorario rh;
            Iterator it = this.getRegistrosHorarios(mes,anio).iterator();
             while(it.hasNext()){
                rh = (RegistroHorario) it.next();
                if(rh.mes() == mes && rh.anio() == anio ){
                    horasTrabajadas =  rh.horasTrabajadas() + horasTrabajadas;
                }
             }
        long minutes = (long) ((horasTrabajadas / (1000*60)) % 60);
        long hours   = (long) ((horasTrabajadas / (1000*60*60)));
        return hours+":"+minutes ;  
     } 
    
    public List<RegistroHorario> getRegistrosHorarios(Integer mes, Integer anio){
        List<RegistroHorario> salida = new ArrayList();
        try{
        for (Rol unRol : this.getRoles()) {
            //unRol = Empresa.persistencia.cargarRol(unRol.getIdRol());
            Personal unPersonal = unRol.getUnPersonal();
            List<RegistroHorario>  lista = unPersonal.getRegistroHorarioMes(mes, anio);            
            Iterator it = unPersonal.getRegistroHorarioMes(mes, anio).iterator();
            while(it.hasNext()){
                salida.add((RegistroHorario) it.next());
            }
        }
        }
        catch(Exception ex){
            
        }
        return salida;
        
    }
}
